En esta wiki, ilustraremos el control de un circuito eléctrico, que presenta una no linealidad. El circuito es el siguiente:
tomaremos como entrada la tensión de la fuente u y como salida, la intensidad de la segunda rama i. Este circuito tiene una conductancia G no lineal de manera que:
Si aplicamos la II Ley de Kirchoff a la primera malla nos queda que:
Aplicando ahora la II LK en la segunda malla tenemos:
Y aplicando nudos en el nudo de arriba nos queda:
Por lo tanto elegimos como ecuaciones de estado para nuestro modelo:
Tal y como muestra la figura, se considerará que L=R=C=1. Ahora tenemos que buscar un punto de trabajo, para poder linealizar f2.
En un primer momento puede parecer que el punto de trabajo i=v=0, u=1 es un buen punto, pero al desarrollar este punto da problemas, ya que ofrece una ganancia negativa en la función de transferencia y el sistema es inestable. Por ello, buscaremos otro punto de trabajo, fijamos i=1 y v=1 y hayamos u.
Usando la segunda ecuación tenemos:
que nos da el valor:
u = 5,079595623
Por lo tanto tenemos el vector de equilibrio xe=(5.079595623,1,1), que por supuesto cumple que f1(xe)=f2(xe )=0.
Linelización de las funciones
Las no linealidades pueden aproximarse razonablemente por expresiones lineales, siempre y cuando las variables no se alejen demasiado de un punto de operación.
Vamos ahora a linealizar la función f2 que es en la que tenemos la no linealidad. Para ello expandimos por Taylor la función entorno al punto de trabajo, calculado esto nos dará nuevas variables i*, v*, u*, que realmente expresarán un incremento de la variable. La función de transferencia, no será realmente la salida entre la entrada, si no que será la relación entre la salida “estrellada” y la entrada “estrellada”. Si el incremento de las variables es pequeño, podemos despreciar los términos de orden mayor que dos, sin que esto suponga un error notable.
Por Taylor:
Por tanto las ecuaciones de estado que nos quedan son
Representación en el Espacio de Estados
Para obtener la función de transferencia del sistema, recurriremos a la descripción interna del sistema. Para ello distinguiremos entre:
Variable de salida: i*
Variable de entrada: u*
Variable de estado: v*
Para ello definiremos la matriz A (matriz de estado), B(matriz de entrada) y C (matriz de salida, quedando nuestro sistema:
Concretando ahora con nuestro sistema nos queda que:
Quedando la representación en el espacio de estados como:
Tomando transformada de Laplace y despejando, nos queda que finalmente que
En MATLAB tenemos dos opciones: Una y menos recomendable es, meter s como parámetro mediante syms y aplicar la fórmula. Este método nos puede dar fallos ya que si la matriz no está muy bien condicionada, MATLAB puede cometer fallos al tratar s como parámetro.
La opción más fiable, es usar el ToolBox de control, en este caso los comandos serían:
Sys=ss(A,B,C,D) *La matriz D es igual a 0 Gs=ss2tf(A,B,C,D)
En nuestro circuito en particular MATLAB nos da la siguiente función de transferencia:
*Nota: la función de transferencia si hubiésemos cogido u=1, i=v=0 hubiese sido:
Que es inestable y además tiene ganancia negativa, lo que lo hace muy difícil de compensar.
La respeusta escalón de nuestro sistemaserá pues:
y el lugar de las raices:
Respuesta y control digital del sistema
La function de transferencia es: s=tf('s') Gc=13.13/(s^2+14.13*s+14.13)
13.13 --------------------- s^2 + 14.13 s + 14.13
Vamos a proceder a discretizarla: Esto es el tiempo de muestreo T=0.1
Discretizamos nuestra funcion de transferencia Gd=c2d(Gc,T,'zoh')
0.04271 z + 0.02679 ---------------------- z^2 - 1.169 z + 0.2434 Como no nos dicen nada, elegimos emplear el Holder0
Podemos obtener la respuesta ante entrada escalón Empleando el siguiente comando: step(Gd) Nosotros vamos a emplear la herranmienta ltiview: Le damos a File->Import->Gd Luego en Characteristics podemos ver el tiempo de subida, tiempo de establecimiento y demás parámetros, podemos ver la respuesta y los parámetros en el siguiente gráfico:
Vemos que: La sobreoscilacion es nula. Tiempo de subida es 0.925 segundos Tiempo de establecimiento es 1.68 segundos
La respuesta ante entrada escalón unitario es 0.482 El tiempo de pico se alcanza en 3.48 segundos. El error en régimen permanente es 1-0.482=0.5180
Para T=0.5s es todo análogo. Tenemos que la función de transferencia discretizada es:
0.3397 z + 0.04825 -------------------------- z^2 - 0.5833 z + 0.0008545 La respuesta ante entrada escalón unitario es:
La sobreoscilacion es 0.894 Tiempo de subida es 0.787 segundos Tiempo de establecimiento es 1.04 segundos
La respuesta ante entrada escalón unitario es 0.482 El tiempo de pico se alcanza en 1.5 segundos, realmente no es un tiempo de pico, ya que el sistema no se comporta como sistema de segundo orden sobreamortiguado. El error en régimen permanente es 1-0.482=0.5180
Para T=1s es todo análogo La función de transferencia en discreto es: 0.5861 z + 0.02848 --------------------------- z^2 - 0.3386 z + 7.302e-007 La sobreoscilacion es 21.17% Tiempo de subida es 0.657 segundos Tiempo de establecimiento es 2.21 segundos
La respuesta ante entrada escalón unitario es 0.482 El tiempo de pico se alcanza en 0.586 segundos. El error en régimen permanente es 1-0.482=0.5180
Vemos que al ir aumentando el tiempo de muestreo, el sistema va perdiendo semejanza con el que tendríamos si empleásemos la función de transferencia en continuo.
Adición de retardo al sistema Nuestro retardo es:
Se cumple que l=0,2, l es un entero entre 0 y 1
Lugar de las Raíces y Ganancia crítica
Para T=0.1 el lugar de las raíces es:
Vemos que el sistema se hace inestable cuando hay polos fuera del círculo unidad. El valor de la ganancia crítica es 7.2231 La respuesta ante escalón es inestable para este valor, como vemos en la siguiente gráfica.
Control del sistema en tiempo discreto Vemos que no podemos cumplir con todas las especificaciones simplemente con una ganancia proporcional con lo que procedemos a controlar el sistema con un PID:
Para eliminar el error metemos el un integrador, es decir un polo en z=1, con el polo aumentamos el tipo del sistema pero se vuelve más inestable. Para cumplir con las otras dos especificaciones, la de Sobreoscilación <15% y la de tiempo de establecimiento <3 segundos metemos 2 ceros. Por tanto nuestro PID es: Dos ceros en z=0.3 y z=0.9 y un polo en polo z=1 (integrador).
Con esto cumplimos con las especificaciones, teniendo el siguiente lugar de las raíces y la siguiente respuesta ante entrada escalón:
Respuesta en SIMULINK
Hemos tenido que calcular con matlab el producto del PID y la función de transferencia y ponerlo todo como un bloque en serie realimentado.
Control de un circuito no linealEn esta wiki, ilustraremos el control de un circuito eléctrico, que presenta una no linealidad. El circuito es el siguiente:
tomaremos como entrada la tensión de la fuente u y como salida, la intensidad de la segunda rama i.
Este circuito tiene una conductancia G no lineal de manera que:
Si aplicamos la II Ley de Kirchoff a la primera malla nos queda que:
Aplicando ahora la II LK en la segunda malla tenemos:
Por lo tanto elegimos como ecuaciones de estado para nuestro modelo:
Tal y como muestra la figura, se considerará que L=R=C=1.
Ahora tenemos que buscar un punto de trabajo, para poder linealizar f2.
En un primer momento puede parecer que el punto de trabajo i=v=0, u=1 es un buen punto, pero al desarrollar este punto da problemas, ya que ofrece una ganancia negativa en la función de transferencia y el sistema es inestable. Por ello, buscaremos otro punto de trabajo, fijamos i=1 y v=1 y hayamos u.
Usando la segunda ecuación tenemos:
que nos da el valor:
u = 5,079595623
Por lo tanto tenemos el vector de equilibrio xe=(5.079595623,1,1), que por supuesto cumple que f1(xe)=f2(xe )=0.
Linelización de las funciones
Las no linealidades pueden aproximarse razonablemente por expresiones lineales, siempre y cuando las variables no se alejen demasiado de un punto de operación.
Vamos ahora a linealizar la función f2 que es en la que tenemos la no linealidad. Para ello expandimos por Taylor la función entorno al punto de trabajo, calculado esto nos dará nuevas variables i*, v*, u*, que realmente expresarán un incremento de la variable. La función de transferencia, no será realmente la salida entre la entrada, si no que será la relación entre la salida “estrellada” y la entrada “estrellada”. Si el incremento de las variables es pequeño, podemos despreciar los términos de orden mayor que dos, sin que esto suponga un error notable.
Por Taylor:
Por tanto las ecuaciones de estado que nos quedan son
Representación en el Espacio de Estados
Para obtener la función de transferencia del sistema, recurriremos a la descripción interna del sistema. Para ello distinguiremos entre:
Para ello definiremos la matriz A (matriz de estado), B(matriz de entrada) y C (matriz de salida, quedando nuestro sistema:
Concretando ahora con nuestro sistema nos queda que:
Quedando la representación en el espacio de estados como:
Tomando transformada de Laplace y despejando, nos queda que finalmente que
G*(s)=(C(sI-A)-1B)
Nota, para más información :
en.wikipedia.org/wiki/State_space_(controls)
Implementación en MATLAB
En MATLAB tenemos dos opciones:
Una y menos recomendable es, meter s como parámetro mediante syms y aplicar la fórmula. Este método nos puede dar fallos ya que si la matriz no está muy bien condicionada, MATLAB puede cometer fallos al tratar s como parámetro.
La opción más fiable, es usar el ToolBox de control, en este caso los comandos serían:
Sys=ss(A,B,C,D) *La matriz D es igual a 0
Gs=ss2tf(A,B,C,D)
En nuestro circuito en particular MATLAB nos da la siguiente función de transferencia:
*Nota: la función de transferencia si hubiésemos cogido u=1, i=v=0 hubiese sido:
Que es inestable y además tiene ganancia negativa, lo que lo hace muy difícil de compensar.
La respeusta escalón de nuestro sistemaserá pues:
y el lugar de las raices:
Respuesta y control digital del sistema
La function de transferencia es:
s=tf('s')
Gc=13.13/(s^2+14.13*s+14.13)
13.13
---------------------
s^2 + 14.13 s + 14.13
Vamos a proceder a discretizarla:
Esto es el tiempo de muestreo
T=0.1
Discretizamos nuestra funcion de transferencia
Gd=c2d(Gc,T,'zoh')
0.04271 z + 0.02679
----------------------
z^2 - 1.169 z + 0.2434
Como no nos dicen nada, elegimos emplear el Holder0
Podemos obtener la respuesta ante entrada escalón
Empleando el siguiente comando:
step(Gd)
Nosotros vamos a emplear la herranmienta ltiview:
Le damos a File->Import->Gd
Luego en Characteristics podemos ver el tiempo de subida, tiempo de establecimiento y demás parámetros, podemos ver la respuesta y los parámetros en el siguiente gráfico:
Vemos que:
La sobreoscilacion es nula.
Tiempo de subida es 0.925 segundos
Tiempo de establecimiento es 1.68 segundos
La respuesta ante entrada escalón unitario es 0.482
El tiempo de pico se alcanza en 3.48 segundos.
El error en régimen permanente es 1-0.482=0.5180
Para T=0.5s es todo análogo.
Tenemos que la función de transferencia discretizada es:
0.3397 z + 0.04825
--------------------------
z^2 - 0.5833 z + 0.0008545
La respuesta ante entrada escalón unitario es:
La sobreoscilacion es 0.894
Tiempo de subida es 0.787 segundos
Tiempo de establecimiento es 1.04 segundos
La respuesta ante entrada escalón unitario es 0.482
El tiempo de pico se alcanza en 1.5 segundos, realmente no es un tiempo de pico, ya que el sistema no se comporta como sistema de segundo orden sobreamortiguado.
El error en régimen permanente es 1-0.482=0.5180
Para T=1s es todo análogo
La función de transferencia en discreto es:
0.5861 z + 0.02848
---------------------------
z^2 - 0.3386 z + 7.302e-007
La sobreoscilacion es 21.17%
Tiempo de subida es 0.657 segundos
Tiempo de establecimiento es 2.21 segundos
La respuesta ante entrada escalón unitario es 0.482
El tiempo de pico se alcanza en 0.586 segundos.
El error en régimen permanente es 1-0.482=0.5180
Vemos que al ir aumentando el tiempo de muestreo, el sistema va perdiendo semejanza con el que tendríamos si empleásemos la función de transferencia en continuo.
Adición de retardo al sistema
Nuestro retardo es:
Se cumple que l=0,2, l es un entero entre 0 y 1
Lugar de las Raíces y Ganancia crítica
Para T=0.1 el lugar de las raíces es:
Vemos que el sistema se hace inestable cuando hay polos fuera del círculo unidad.
El valor de la ganancia crítica es 7.2231
La respuesta ante escalón es inestable para este valor, como vemos en la siguiente gráfica.
Control del sistema en tiempo discreto
Vemos que no podemos cumplir con todas las especificaciones simplemente con una ganancia proporcional con lo que procedemos a controlar el sistema con un PID:
Para eliminar el error metemos el un integrador, es decir un polo en z=1, con el polo aumentamos el tipo del sistema pero se vuelve más inestable.
Para cumplir con las otras dos especificaciones, la de Sobreoscilación <15% y la de tiempo de establecimiento <3 segundos metemos 2 ceros.
Por tanto nuestro PID es:
Dos ceros en z=0.3 y z=0.9 y un polo en polo z=1 (integrador).
Con esto cumplimos con las especificaciones, teniendo el siguiente lugar de las raíces y la siguiente respuesta ante entrada escalón:
Respuesta en SIMULINK
Hemos tenido que calcular con matlab el producto del PID y la función de transferencia y ponerlo todo como un bloque en serie realimentado.
La respuesta que nos da SIMULINK es la siguiente:
ue nos da el valor:
u = 5,079595623